
\title{编译原理讲义说明及教程}
\chapter{编译原理讲义说明及教程}

\section{格式说明}
\par
纸张大小：A4（body 区域宽纵比8:9）
\par
字体大小：12磅
\par
英文字体：Times New Roman
\par
中文正文以及无衬线字体：宋体
\par
中文字体伪粗体粗度：2.5
\par
首行缩进：2格

\section{项目文件结构}

\noindent
\textbf{目录树结构}

\noindent
\dirtree{%
	.1 ..
	.2 compile\_notes.tex.
	.2 structure.tex.
	.2 chapter*.
	.3 chapter*.tex.
	.3 figures.
	.4 {\texttt{chapter}*}-{\texttt{serial}*}.png.
}

\par\noindent
说明：

\begin{description}
\item[compile\_notes.tex] tex文件的主入口，形似main.cpp，这个文件负责引入结构和各章节的内容，同时也是项目中编译生成pdf的源入口。
\item[structure.tex] 项目绝大部分格式设置和其必须包所在的文件。以类似\#define宏指令的方法不加修饰的把该文件在 compile\_notes.tex引言区展开。
\item[chapter*] 存放各章节tex内容和图像的文件夹，*部分以各章节实际章节号替换。
\item[chapter*.tex] 该章节的内容tex，*位置同上所述。
\item[figures] 存放各章节图像的文件夹。
\item[ {\texttt{chapter}*}-{\texttt{serial}*}.png] 各章节具体的图像文件，用章节号替换chapter，用本章节内出现的图片序号替换serial。
\end{description}

\par
项目平台：gitlab
\par
项目名称：compiler-notes
\par
项目地址：http://47.105.50.196/NiuTrans/compiler-notes

\section{转录细节要求}
注意，文件用UTF-8编码！
\subsection{章节结构内容与组织}
\begin{enumerate}
	\item 允许采用1-4级标题 \verb|\chapter{}，\section{}, \subsection{}, \subsubsection{}| 和段落符号 \verb|\paragraph{}|，
	
	\item \verb|\section{}和\subsection{}|之间不留空白。避免产生如图\ref{fig:1-1}所示情况，如转录内容无额外说明，则根据该章节内容总结填充。
	
	\item 注意列表缩进，列表项如果换行，内容要在序号之后
	
	\item 列表环境如果有数字嵌套，第一层用(1)，第二层可以用\ding{172} (在这里我们使用\verb|\ding{172}|来生成圆圈序号 )
	
	\item 单句不成段，看看咋扩充一下。
	
	\item 符号采用英文半角
	
	\item 图必须写说明，使用\verb*|\caption{}|就行
\end{enumerate}

\subsection{代码、公式、图表等要求}
\begin{enumerate}
	\item 所有的代码、公式、图表需要加上\verb*|\label{key}|标签，为了防止标签冲突，规定其中key部分规则为 $\{code|eq|fig|tab\}:\{chapter\} -  \{\texttt{序号}\}$,如第一章的第一幅图，其标签为\verb*|\label{fig:1-1}|，不同种类的元素之间序号独立。
	
	\item 定义和例子需要使用definition或example\textbf{环境}（即\verb*|\begin{definition}内容\end{definition}|），如\begin{definition}
		
		疯狂星期四——肯德基的一种活动
	\end{definition}
	定义和例子打label的方式同上，区别只在于定义用def作为标识，例子用ex作为标识。
	\begin{example}
	
	你好，我是一个示例
	
	
	“明天天气多云，请注意穿衣”
	
	\end{example}

	\item 公式环境使用\verb*|\eqnarray和\aligned|,并且保证按等号对齐（使用\&号），公式标号出现在最后一行，为了避免前面出现序号，前面每一行后面可以加\verb*|\nonumber|标签。如下所示
	\begin{eqnarray}
	\begin{aligned}
	\nonumber	\mathrm{Attention}(\textbf{\textit{Q}},\textbf{\textit{K}},\textbf{\textit{V}}) &=\mathrm{Softmax}(\displaystyle\frac{\textbf{\textit{Q}}\textbf{\textit{K}}^T}{\sqrt{d_k}}+\textbf{\textit{Mask})}\textbf{\textit{V}}\\ 
	\mathrm{P}(\textit{A}|\textit{B})&=\displaystyle\frac{\mathrm{P}(\textit{AB})}{\mathrm{P}(\textit{B})}
	\end{aligned}
	\end{eqnarray}
	
	\item 公式中的变量名需要变为斜体，向量需要在斜体的基础上加粗，函数名不需要改变，可以使用\verb*|\mathrm{}|，加粗的快捷键默认是ctrl+B,斜体的快捷键是ctrl+I。如果需要在公式区域中产生中文，使用\verb*|\texttt{}|.
	
	\item 表格样式采用三线表，如表\ref{tab:addlabel}所示，控制框线粗细需要引入包booktabs，通过控制\verb*|\toprule[line_width]、\midrule[line_width]和\bottomrule[line_width]实现|;或者可以通过\verb*|\xhline{line_width}|控制.当然，最方便的方法是使用excel加载项Excel2Latex，其下载网址是http://mirrors.ctan.org/support/excel2latex/Excel2LaTeX.xla 或在线表格生成网站https://www.latex-tables.com/
	 
	% Table generated by Excel2LaTeX from sheet 'Sheet1'
	\begin{table}[htbp]
		\centering
		\caption{Add caption}
		\begin{tabular}{c|ccccccc}
			\Xhline{2pt}
			& 周日    & 周一    & 周二    & 周三    & 周四    & 周五    & 周六 \\
			\Xhline{0.5pt}
			1     &       &       &       & \multirow{2}[1]{*}{机器翻译} &       &       &  \\
			2     &       &       &       &       &       &       &  \\
			3     & \multirow{2}[0]{*}{最优化} &       &       &       &       &       &  \\
			4     &       &       &       &       &       &       &  \\
			5     &       &       &       &       &       &       &  \\
			6     &       &       &       &       &       &       &  \\
			7     & \multirow{2}[0]{*}{概率论} &       &       &       &       &       &  \\
			8     &       &       &       &       &       &       &  \\
			合计课数  & 2     & 0     & 0     & 1     & 0     & 0     & 0 \\
			\Xhline{2pt}
		\end{tabular}%
		\label{tab:addlabel}%
	\end{table}%
	
	\begin{table*}
		\centering
		\caption{table example}
		\label{tab:1-1}
		\begin{tabular}{c|ccccccc}
			\Xhline{2pt}
			Train & ND & YOS & LIB & YOS & LIB & ND & \multirow{2}{*}{Mean} \\
			\cmidrule(r){0-1}\cmidrule(lr){2-3}\cmidrule(lr){4-5}\cmidrule(lr){6-7}
			Test & \multicolumn{2}{c}{LIB} & \multicolumn{2}{c}{ND} & \multicolumn{2}{c}{YOS} &\\
			\Xcline{1-1}{0.4pt}
			\Xhline{1pt}
			
			SIFT [23] & \multicolumn{2}{c}{29.84} & \multicolumn{2}{c}{22.53} & \multicolumn{2}{c}{27.29} & 26.55\\
			TFeat [3] & 7.39 & 10.13 & 3.06 & 3.80 & 8.06 & 7.24 & 6.64 \\
			L2-Net [46] & 2.36 & 4.70 & 0.72 & 1.29 & 2.57 & 1.71 & 2.23 \\
			HardNet [26] & 1.49 & 2.51 & 0.53 & 0.78 & 1.96 & 1.84 & 1.51 \\
			DOAP [15] & 1.54 & 2.62 & 0.43 & 0.87 & 2.00 & 1.21 & 1.45 \\
			SOSNet [47] & 1.08 & 2.12 & 0.35 & 0.67 & 1.03 & \textbf{0.95} & 1.03 \\
			\textbf{HyNet} & \textbf{0.89} & \textbf{1.37} & \textbf{0.34} & \textbf{0.61} & \textbf{0.88} & 0.96 & \textbf{0.84} \\
			
			\Xhline{2pt}
		\end{tabular} 
	\end{table*}
	\item 代码使用lstlisting环境
\end{enumerate}




\begin{figure*}[]
	\centering
	\includegraphics[width=1\linewidth]{instructions/figures/screenshot001}
	\caption{section和subsection之间应不留空白}
	\label{fig:1-1}
\end{figure*}



% first argument: minted programming language name, for example.. css, c, cpp, etc.

\begin{lstlisting}[label={code-1},caption=Sample Python code -- Fibonacci sequence calculated analytically]
	from math import *
	
	# define function 
	def analytic_fibonacci(n):
	sqrt_5 = sqrt(5);
	p = (1 + sqrt_5) / 2;
	q = 1/p;
	return int( (p**n + q**n) / sqrt_5 + 0.5 )
	
	# define range
	for i in range(1,31):
	print analytic_fibonacci(i)
\end{lstlisting}

\section{一些问题的解决方案}

\textbf{File '.sty' not found.} \verb*|\usepackage|

这种情况的示例如图\ref{fig:screenshot002}所示，这种情况可能来源于你的环境里没有这个package，或者有但是导入失败。针对这两个问题，有不同的解决方法。

1.如果没有这个package，可以去https://ctan.org/pkg/上下载，在图\ref{fig:screenshot003}的位置输入确实包名，下载对应的zip文件，然后解压到tex安装的位置。比如我的电脑上是\verb*|E:\CTEX\MiKTeX\tex\latex|，添加完成之后，使用win+r键调出cmd，输入texhash，刷新tex数据库，静待片刻即可。

2.如果有确实还出现了这个情况（也就是在包路径下找到了你要找的包），可以在\verb*|\usepackage|采用绝对路径索引，一般可以解决
\begin{figure}[H]
	\centering
	\includegraphics[width=1\linewidth]{instructions/figures/screenshot002}
	\caption{错误示例}
	\label{fig:screenshot002}
\end{figure}

\begin{figure}[H]
	\centering
	\includegraphics[width=1\linewidth]{instructions/figures/screenshot003}
	\caption{搜索位置}
	\label{fig:screenshot003}
\end{figure}

\textbf{Can be used only in preamble.} \verb*|\usepackage|

引用包只能在引言区，也就是在document开始之前，在我们的项目中，不要在章节文件内部引用包，尽量放置在structure.tex文件中，并写好关于这个包用途的注释。

\textbf{表格的竖线断开}

这是因为大部分的自动生成插件都在使用toprule midrule bottomrule，这三用来生成三线表很方便，但是会出现竖线断开的问题，可以用hline替换即可。

